<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>1290. 二进制链表转整数</title>
</head>
<body>
    <script>
//         给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。

// 请你返回该链表所表示数字的 十进制值 。

 

// 示例 1：



// 输入：head = [1,0,1]
// 输出：5
// 解释：二进制数 (101) 转化为十进制数 (5)
// 示例 2：

// 输入：head = [0]
// 输出：0
// 示例 3：

// 输入：head = [1]
// 输出：1
// 示例 4：

// 输入：head = [1,0,0,1,0,0,1,1,1,0,0,0,0,0,0]
// 输出：18880
// 示例 5：

// 输入：head = [0,0]
// 输出：0
 

// 提示：

// 链表不为空。
// 链表的结点总数不超过 30。
// 每个结点的值不是 0 就是 1。

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {number}
 */
var getDecimalValue = function(head) {
    let n = [];
    let i = 0;
    while (head) {
        if (head.val == 1 && n.length > 0) {
            // 找到最后一位0
            n.map((v, j) => {
                n[j] = v += i;
            });
            i = 0
            n.push(0);
        }
        if (head.val == 1 && n.length == 0) {
            // 找到第一位1
            n.push(0);
            i = 0
        }
        i++;
        head = head.next;
    }
    n.map((v, j) => {
        n[j] = v += i - 1;
    });
    let total = 0;
    // 计算总和
    n.forEach((e) => {
        total += Math.pow(2, e);
    })
    return total
};
    </script>
</body>
</html>